In conventional programmable processors, floating point operations are mathematical operations in which the operands and the results are represented in fractional form. In certain situations, however, it is desirable to obtain an integer result. For example, while the floating point operation 15/4 yields the result 3.75, it may be preferable under some circumstances to return a result of 3 or 4. In such cases, the preferred result can be obtained using a rounding operation.
Some processors perform such rounding operations by rounding down in all cases or, alternatively, by rounding up in all cases. For processors that round down in all cases, for example, a value of 3.999 rounds to 3, while a value of −3.999 rounds to −4. By contrast, for processors that always round up, a value of 3.999 rounds to 4, while a value of −3.999 rounds to −3. While these results are acceptable for some applications, other applications, such as those intended to be compliant with standards, require symmetrical rounding. For such applications, for instance, if a value of 3.999 rounds to 3, a value of −3.999 should round to −3, rather than −4.
Some approaches for obtaining compliant rounding results in these situations involve the use of greater degrees of precision. For example, to obtain 16-bit compliance with standards, some processors use 32-bit precision. This approach can produce compliant rounding results, but performance is typically compromised due to the additional operations involved with the higher degree of precision.
Accordingly, a need continues to exist for an integer rounding technique that will produce results that comply with standards, while maintaining efficient processor performance.